package com.lp.biz.member.service;

import com.lp.biz.member.model.entity.Member;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lp.biz.member.model.query.*;
import com.lp.biz.member.model.vo.CreateTrainManage;
import com.lp.common.context.UserDetail;
import com.lp.common.entity.PageParams;
import com.lp.common.utils.CommonResult;

import java.math.BigDecimal;

/**
 * Member 服务类
 * @program: backend
 * @author Ke.Song
 * @since 2024-05-03 11:30:02
 */
public interface MemberService extends IService<Member> {

    /**
     * 获取用户下拉
     * @param nickName 昵称
     * @param phone 手机号
     * @return 查询结果
     */
    CommonResult getMemberList(String nickName, String phone);

    /**
     * 获取普通用户列表
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getNormalMemberList(NormalMemberQuery query);

    /**
     * 获取用户详情
     * @param memberId 用户id
     * @return 查询结果
     */
    UserDetail getUserDetail(Integer memberId);

    /**
     * 获取共读会会员列表
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getReadingMemberList(NormalMemberQuery query);

    /**
     * 获取训练营会员列表
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getTrainStudent(TrainStudentQuery query);

    /**
     * 获取管理列表
     *
     * @param query    查询参数
     * @param category 分类
     * @return 查询结果
     */
    CommonResult getTrainManageList(TrainMemberQuery query, String category);

    /**
     * 增加管理
     * @param manage 增加参数
     */
    void addTrainManage(CreateTrainManage manage);

    /**
     * 获取知识顾问列表
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getAdvisors(AdvisorQuery query);

    /**
     * 获取用户详情
     * @param memberId 用户id
     * @return 查询结果
     */
    CommonResult getMemberDetail(Integer memberId);

    /**
     * 获取用户详情订单记录
     * @param memberId 用户id
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getMemberOrders(PageParams query, Integer memberId);

    /**
     * 获取用户详情邀请记录
     * @param memberId 用户id
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getMemberInvitationList(PageParams query, Integer memberId);

    /**
     * 增加黑名单
     *
     * @param memberId 用户id
     * @param reason 原因
     */
    void addOrUpdateBlackList(Integer memberId, String reason);

    /**
     * 获取用户详情学习记录
     * @param memberId 用户id
     * @param query 查询记录
     * @return 查询记录
     */
    CommonResult getStudyList(PageParams query, Integer memberId);

    /**
     * 获取用户详情活动记录
     * @param memberId 用户id
     * @param query 查询记录
     * @return 查询记录
     */
    CommonResult getActivityList(PageParams query, Integer memberId);

    /**
     * 获取用户详情文章记录
     * @param memberId 用户id
     * @param query 查询记录
     * @return 查询记录
     */
    CommonResult getArticleList(PageParams query, Integer memberId);

    /**
     * 获取退休人员申请列表
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getPension(PensionQuery query);

    /**
     * 获取退休人员列表
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getPensionMembers(PensionQuery query);

    /**
     * 申请列表明细
     *
     * @param pensionId 申请记录id
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getPensionDetail(Integer pensionId, PensionQuery query);

    /**
     * 审批退休申请
     * @param detailId 明细id
     * @param status 状态
     */
    void agreePension(Integer detailId, Integer status);

    /**
     * 审批退休申请
     * @param detailId 明细id
     * @param status 状态
     */
    void refusePension(Integer detailId, Integer status);

    /**
     * 更新费率
     * @param memberId 用户id
     * @param rate 新费率
     */
    void updateRate(Integer memberId, BigDecimal rate);
}
